// 创建一个 cart 模块
export default {
  namespaced: true,
  state: {
    num: 110,
    // 保存所有的购物车中的数据
    cart: uni.getStorageSync('cart') || []
  },
  mutations: {
    // 设置所有商品的状态
    changeAllStatus(state, bool) {
      // 修改所有商品的状态
      state.cart.forEach(item => {
        item.goods_status = bool
      })
      // 将状态保存到本地
      uni.setStorageSync('cart', state.cart)
    },
    // 删除商品
    removeGoods(state, goods_id) {
      // 删除商品
      const newArr = state.cart.filter(item => item.goods_id !== +goods_id)
      // 将新的数组重置赋值给 cart
      state.cart = newArr
      // 将数据保存到本地
      uni.setStorageSync('cart', state.cart)
    },
    // 修改商品的数量
    changeCount(state, goodsObj) {
      // 找到 goodsObj 对应的商品信息
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      // 判断是否存在
      if (obj) {
        // 修改数量
        obj.goods_count = goodsObj.goods_count
      }
      // 将数据重新保存到本地
      uni.setStorageSync('cart', state.cart)
    },
    // 修改商品的状态
    changeStatus(state, goodsObj) {
      // 得到 cart 中对应的商品数据
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      // 判断是否存在
      if (obj) {
        // 修改状态
        obj.goods_status = goodsObj.goods_status
      }
      // 将数据保存到本地
      uni.setStorageSync('cart', state.cart)
    },
    // 将商品数据添加到购物车中
    // goodsObj: goods_id 商品id goods_name 商品名称 goods_price 商品价格 goods_small_logo 商品图片 goods_count 商品数量 goods_status 商品状态
    addToCart(state, goodsObj) {
      // 判断 goodsObj 在 cart 中是否存在
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      if (!obj) {
        state.cart.push(goodsObj)
      } else {
        obj.goods_count += 1
      }
      console.log(state.cart)
      // 将购物车中的数据保存到本地
      uni.setStorageSync('cart', state.cart)
    },
    // 覆盖掉购物车中的数据
    setCart(state, cart) {
      state.cart = cart
      // 将购物车中的数据保存到本地
      uni.setStorageSync('cart', state.cart)
    }
  },
  actions: {},
  getters: {
    // 定义一个商品的总数
    total(state) {
      // 得到所有选中的商品的总数: reduce
      return state.cart.reduce((sum, item) => {
        return sum += item.goods_status ? item.goods_count : 0
      }, 0)
    },
    // 定义一个全选的状态
    isCheckAll(state) {
      // 判断 cart 中是否所有的元素都为选中状态
      return state.cart.every(item => item.goods_status)
    },
    total_price(state) {
      // 计算所有选中商品的总价
      return state.cart.reduce((sum, item) => {
        return sum += item.goods_status ? item.goods_count * item.goods_price : 0
      }, 0)
    }
  }
}
